/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.sigodonto.view.managedbean;

import br.com.sigodonto.model.dao.DaoGenerico;
import br.com.sigodonto.model.entity.Paciente;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.Serializable;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.imageio.stream.FileImageOutputStream;
import javax.servlet.ServletContext;
import org.primefaces.event.FileUploadEvent;

/**
 *
 * @author Fidelis
 */
@ManagedBean
@ViewScoped
public class GerenciarPacienteMB implements Serializable {

    private String[] estados = {"Acre", "Alagoas", "Amapá", "Amazonas", "Bahia", "Ceará", "Distrito Federal", "Espírito Santo", "Goiás", "Maranhão",
        "Mato Grosso", "Mato Grosso do Sul", "Minas Gerais", "Pará", "Paraíba", "Paraná", "Pernambuco", "Piauí", "Rio de Janeiro", "Rio Grande do Norte",
        "Rio Grande do Sul", "Rondônia", "Roraima", "Santa Catariana", "São Paulo", "Sergipe", "Tocantins"};
    private Paciente paciente;
    private Paciente pacienteSelecionado;
    private List<Paciente> pacientesTodos;
    private DaoGenerico daoGenerico;

    /**
     * Creates a new instance of GerenciarPacienteMB
     */
    public GerenciarPacienteMB() {
        this.daoGenerico = new DaoGenerico();
        this.paciente = new Paciente();
        this.pacienteSelecionado = new Paciente();
        this.pacientesTodos = this.daoGenerico.listarTodos(Paciente.class);
    }

    public Paciente getPaciente() {
        return paciente;
    }

    public void setPaciente(Paciente paciente) {
        this.paciente = paciente;
    }

    public String[] getEstados() {
        return estados;
    }

    public List<Paciente> getPacientesTodos() {
        return pacientesTodos;
    }

    public void setPacientesTodos(List<Paciente> pacientesTodos) {
        this.pacientesTodos = pacientesTodos;
    }

    public Paciente getPacienteSelecionado() {
        return pacienteSelecionado;
    }

    public void setPacienteSelecionado(Paciente pacienteSelecionado) {
        this.pacienteSelecionado = pacienteSelecionado;
    }

    public void salvarPaciente() {
        FacesMessage message = new FacesMessage();
        String msg = "PACIENTE CADASTRADO COM SUCESSO!";
        message.setSeverity(FacesMessage.SEVERITY_INFO);

        this.paciente.setData_cadastro(new Date());
        boolean certo = this.daoGenerico.salvar(this.paciente);

        if (!certo) {
            msg = "ERRO AO CADASTRAR PACIENTE!";
            message.setSeverity(FacesMessage.SEVERITY_ERROR);
        } else {
            this.pacientesTodos = this.daoGenerico.listarTodos(Paciente.class);
            this.paciente = new Paciente();
        }

        message.setSummary(msg);
        FacesContext.getCurrentInstance().addMessage(null, message);
    }

    public void excluirPaciente() {
        if (this.pacienteSelecionado != null) {
            String msg = "PACIENTE REMOVIDO COM SUCESSO!";
            FacesMessage message = new FacesMessage(msg);
            message.setSeverity(FacesMessage.SEVERITY_INFO);

            if (pacienteSelecionado.getFoto() != null) {
                ServletContext servletContext = (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext();
                String url = servletContext.getRealPath("") + File.separator + "resources" + File.separator + "pacientes" + File.separator + pacienteSelecionado.getFoto();

                File f = new java.io.File(url);
                f.delete();
            }

            boolean certo = this.daoGenerico.remover(this.pacienteSelecionado);

            if (!certo) {
                msg = "ERRO AO REMOVER PACIENTE!";
                message.setSummary(msg);
                message.setSeverity(FacesMessage.SEVERITY_ERROR);
            } else {
                this.pacientesTodos = this.daoGenerico.listarTodos(Paciente.class);
            }

            FacesContext.getCurrentInstance().addMessage(null, message);

        }
    }

    public void atualizarPaciente() {
        if (this.pacienteSelecionado != null) {
            this.paciente = this.pacienteSelecionado;
        }
    }

    public void fileUploadAction(FileUploadEvent event) {
        if (this.paciente.getFoto() == null) {
            Calendar c = new GregorianCalendar();
            String[] partesNome = event.getFile().getFileName().split("\\.");

            String nomeArq = "paciente" + c.get(Calendar.DAY_OF_MONTH) + c.get(Calendar.MONTH) + c.get(Calendar.YEAR) + "_" + c.get(Calendar.HOUR) + c.get(Calendar.MINUTE) + c.get(Calendar.SECOND) + "." + partesNome[1];

            ServletContext servletContext = (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext();
            String newFileName = servletContext.getRealPath("") + File.separator + "resources" + File.separator + "pacientes" + File.separator + nomeArq;

            FileImageOutputStream imageOutput;
            try {

                this.paciente.setFoto(nomeArq);
                System.out.println(this.paciente.getFoto());

                imageOutput = new FileImageOutputStream(new File(newFileName));
                imageOutput.write(event.getFile().getContents(), 0, event.getFile().getContents().length);
                imageOutput.close();


            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        } else {
            ServletContext servletContext = (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext();
            String caminhoAtualizando = servletContext.getRealPath("") + File.separator + "resources" + File.separator + "pacientes" + File.separator + this.paciente.getFoto();

            FileImageOutputStream imageOutput;
            try {


                imageOutput = new FileImageOutputStream(new File(caminhoAtualizando));
                imageOutput.write(event.getFile().getContents(), 0, event.getFile().getContents().length);
                imageOutput.close();


            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}
